package com.datastructure.linkedlist;

/**
 * @author: 临晖
 * @date: 2023/10/11
 * @description:
 */


/**
 * 删除列表倒数第n个节点
 */
public class Solution04 {

    public ListNode removeNthFromEnd(ListNode head, int n) {
        //思路一
        ListNode newHead = new ListNode(0, head);
        ListNode first = newHead;
        ListNode last = newHead;
        int i = 0;
        while (last != null) {
            last  = last.next;
            if (i > n ) {
                first = first.next;
            }

            i++;
        }

        first.next = first.next.next;
        return newHead.next;

        //思路二：先计算出一共有多少个节点（假设一共有m个），然后将删除倒数第n个几点转化为删除正数第 (m - n)个节点，然后循环
        //(m - n)次，找出那个节点的前一个节点，将其删除
    }
}
